#include <iostream>

using std::cout;
using std::endl;

//2、引用也可以作为函数的返回结果

int func()
{
    int number = 10;//局部变量
    return number;//拷贝
}

//不建议返回局部变量的引用,引用绑定的变量已经销毁了
//如果一定要返回引用的话，前提条件是：返回的实体的生命周期
//一定要大于函数的生命周期
int &func2()
{
    int number = 10;//局部变量
    return number;
}

int &func3()
{
    static int number = 10;//静态变量
    return number;
}

int arr[10] = {1, 2, 3};

int &func4(int idx)
{
    return arr[idx];
}


void test()
{
    int &a = func4(0);
    cout << "a = " << a << endl;
    cout << "arr[0] = " << arr[0] << endl;
    a = 100;
    cout << "a = " << a << endl;
    cout << "arr[0] = " << arr[0] << endl;
}

//不要返回堆空间的引用，有可能会导致内存泄漏,除非可以进行自动
//内存回收
int &func5()
{
    int *pInt = new int(10);//堆空间

    return *pInt;
}

void test2()
{
    int a = 3;
    int b = 4;
    int c = a + func5() + b;//堆空间没有释放
    cout << "c = " << c << endl;

    int &ref = func5();
    delete &ref;//回收堆空间
}


int main(int argc, char *argv[])
{
    test2();
    return 0;
}

